package com.Sep_Nineteen;

import java.util.*;

/**
 * 1636. 按照频率将数组升序排序
 * 给你一个整数数组 nums ，请你将数组按照每个值的频率 升序 排序。如果有多个值的频率相同，请你按照数值本身将它们 降序 排序。 
 *
 * 请你返回排序后的数组。
 *
 *  
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/sort-array-by-increasing-frequency
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */

public class Solution1636 {


    public static int[] frequencySort(int[] nums) {
        List<Integer> list=new ArrayList<>();
        int[] cnt=new int[201];
        for (int num:nums)
        {
            num+=100;
            cnt[num]++;
            list.add(num);
        }
        list.sort((a,b)->
        {
            int aCount=cnt[a];
            int bCount=cnt[b];
            if (aCount==bCount)
            {
                return b-a;
            }
            return aCount-bCount;
        });
        int[] res=new int[list.size()];
        for (int i=0;i<list.size();i++)
        {
            res[i]=list.get(i)-100;
        }
        return res;
    }

//    public static int[] frequencySort(int[] nums) {
//        List<Integer> list=new ArrayList<>();
//        Map<Integer,Integer> map=new HashMap<>();
//        for (int num : nums) {
//            list.add(num);
//            map.put(num, map.getOrDefault(num, 0) + 1);
//        }
//        list.sort((a,b)->{
//            int aCount=map.get(a);
//            int bCount=map.get(b);
//            if (aCount==bCount)
//            {
//                return b-a;
//            }
//            return aCount-bCount;
//        });
//        int[] res=new int[list.size()];
//        for (int i=0;i<list.size();i++)
//        {
//            res[i]=list.get(i);
//        }
//        return res;
//    }

    public static void main(String[] args) {
        int[] ints={-1,1,-6,4,5,-6,1,4,1};
        System.out.println(Arrays.toString(frequencySort(ints)));
    }
}
